import yaml
text = {
    'sql_generate_base_on_example_prompt': '''你是一个数据库专家，你的任务是参考给出的表结构以及表注释和示例，基于给出的问题生成一条在{database_url}连接下可进行查询的sql语句。
注意：
#01 sql语句中，特殊字段需要带上双引号。
#02 sql语句中，如果要使用 as，请用双引号把别名包裹起来。
#03 sql语句中，查询字段必须使用`distinct`关键字去重。
#04 sql语句中，只返回生成的sql语句, 不要返回其他任何无关的内容
#05 sql语句中，参考问题，对查询字段进行冗余。
#06 sql语句中，需要以分号结尾。

以下是表结构以及表注释：
{note}
以下是{k}个示例：
{sql_example}
以下是问题：
{question}
''',
    'question_generate_base_on_data_prompt': '''你是一个postgres数据库专家，你的任务是根据给出的表结构和表内数据，输出一个用户可能针对这张表内的信息提出的问题。
注意：
#01 问题内容和形式需要多样化，例如要用到统计、排序、模糊匹配等相关问题。
#02 要以口语化的方式输出问题，不要机械的使用表内字段输出问题。
#03 不要输出问题之外多余的内容！
#04 要基于用户的角度取提出问题，问题内容需要口语化、拟人化。
#05 优先生成有注释的字段相关的sql语句。

以下是表结构和注释：
{note}
以下是表内数据
{data_frame}
''',
    'sql_generate_base_on_data_prompt': '''你是一个postgres数据库专家，你的任务是参考给出的表结构以及表注释和表内数据，基于给出的问题生成一条查询{database_type}的sql语句。
注意：
#01 sql语句中，特殊字段需要带上双引号。
#02 sql语句中，如果要使用 as，请用双引号把别名包裹起来。
#03 sql语句中，查询字段必须使用`distinct`关键字去重。
#04 sql语句中，只返回生成的sql语句, 不要返回其他任何无关的内容
#05 sql语句中，参考问题，对查询字段进行冗余。
#06 sql语句中，需要以分号结尾。

以下是表结构以及表注释：
{note}
以下是表内的数据：
{data_frame}
以下是问题：
{question}
''',
    'sql_expand_prompt': '''你是一个数据库专家，你的任务是参考给出的表结构以及表注释、执行失败的sql和执行失败的报错，基于给出的问题修改执行失败的sql生成一条在{database_type}连接下可进行查询的sql语句。

  注意：

  #01 假设sql中有特殊字符干扰了sql的执行，请优先替换这些特殊字符保证sql可执行。

  #02 假设sql用于检索或者过滤的字段导致了sql执行的失败，请尝试替换这些字段保证sql可执行。

  #03 假设sql检索结果为空，请尝试将 = 的匹配方式替换为 ilike \'\%\%\' 保证sql执行给出结果。

  #04 假设sql检索结果为空，可以使用问题中的关键字的子集作为sql的过滤条件保证sql执行给出结果。

  以下是表结构以及表注释：

  {note}

  以下是执行失败的sql：

  {sql_failed}

  以下是执行失败的报错：

  {sql_failed_message}

  以下是问题：

  {question}
''',
    'table_choose_prompt': '''你是一个数据库专家，你的任务是参考给出的表名以及表的条目（主键，表名、表注释），输出最适配于问题回答检索的{table_cnt}张表，并返回表对应的主键。
注意：
#01 输出的表名用python的list格式返回，下面是list的一个示例：
[\"prime_key1\",\"prime_key2\"]。
#02 只输出包含主键的list即可不要输出其他内容!!!
#03 list重主键的顺序，按表与问题的适配程度从高到底排列。
#04 若无任何一张表适用于问题的回答，请返回空列表。

以下是表的条目：
{table_entries}
以下是问题：
{question}
'''
}
print(text)
with open('./prompt.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(text, f, allow_unicode=True)
